package org.lql.algo.codecrush.week005;

/**
 * @author: liangqinglong
 * @date: 2025-08-05 17:50
 * @description: LCR 126. 斐波那契数 <a href="https://leetcode.cn/problems/fei-bo-na-qi-shu-lie-lcof/description/">...</a>
 **/
public class Fib {

	/**
	 * 斐波那契数 （通常用 F(n) 表示）形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始，后面的每一项数字都是前面两项数字的和。也就是：
	 * <p>
	 * F(0) = 0，F(1) = 1
	 * F(n) = F(n - 1) + F(n - 2)，其中 n > 1
	 * 给定 n ，请计算 F(n) 。
	 * <p>
	 * 答案需要取模 1e9+7(1000000007) ，如计算初始结果为：1000000008，请返回 1。
	 * <p>
	 * <p>
	 * <p>
	 * 示例 1：
	 * <p>
	 * 输入：n = 2
	 * 输出：1
	 * 解释：F(2) = F(1) + F(0) = 1 + 0 = 1
	 * 示例 2：
	 * <p>
	 * 输入：n = 3
	 * 输出：2
	 * 解释：F(3) = F(2) + F(1) = 1 + 1 = 2
	 * 示例 3：
	 * <p>
	 * 输入：n = 4
	 * 输出：3
	 * 解释：F(4) = F(3) + F(2) = 2 + 1 = 3
	 * <p>
	 * <p>
	 * 提示：
	 * <p>
	 * 0 <= n <= 100
	 */
	public int fib(int n) {
		if (n == 0) {
			return 0;
		}
		if (n == 1) {
			return 1;
		}
		int a = 0;
		int b = 1;
		int sum = 0;
		for (int i = 2; i <= n; i++) {
			sum = (a + b) % 1000000007;
			a = b;
			b = sum;
		}
		return sum;
	}


	public static void main(String[] args) {
		Fib fib = new Fib();
		System.out.println(fib.fib(20));
	}
}
